package main

import (
	"fmt"
	"math/rand"
)

func main() {
	//打印26个字母
	print26Letter()
	//获取最大值
	getMax()
	//获取平均值
	getAvg()
	//使用另一个数组进行数组反转
	arrayReverseWithAnotherArray()
	//数组反转
	arrayReverse()
	//数组~结构体
	structArray()
}

// print26Letter
//
//	@Description: 打印26个字母
func print26Letter() {
	fmt.Println("-------------打印26个字母-------------")
	var upperChars [26]byte
	for i := 0; i < len(upperChars); i++ {
		upperChars[i] = 'A' + byte(i)
	}

	for i := 0; i < len(upperChars); i++ {
		fmt.Printf("%c ", upperChars[i])
	}

	fmt.Println()

	var lowerChars [26]byte
	for i := 0; i < len(lowerChars); i++ {
		lowerChars[i] = 'a' + byte(i)
	}
	for i := 0; i < len(lowerChars); i++ {
		fmt.Printf("%c ", lowerChars[i])
	}

}

func getMax() {
	fmt.Println("-------------获取最大值-------------")

	var arr [10]int
	for i := 0; i < len(arr); i++ {
		arr[i] = rand.Intn(100)
	}
	fmt.Printf("%v\n", arr)
	var maxValue int
	for _, value := range arr {
		if value > maxValue {
			maxValue = value
		}
	}
	fmt.Printf("max =%d\n", maxValue)

}

func getAvg() {
	fmt.Println("-------------获取平均值-------------")
	var arr [10]int
	for i := 0; i < len(arr); i++ {
		arr[i] = rand.Intn(100)
	}
	var total int
	for _, v := range arr {
		total += v
	}
	fmt.Printf("avg =%.2f\n", float64(total)/float64(len(arr)))
}

func arrayReverseWithAnotherArray() {
	fmt.Println("-------------使用另一个数组进行数组反转-------------")
	var arrOld [10]int
	for i := 0; i < len(arrOld); i++ {
		arrOld[i] = rand.Intn(100)
	}
	fmt.Println(arrOld)

	//使用另一个数组进行反转
	var arrNew [10]int
	j := 0
	for i := len(arrOld) - 1; i >= 0; i-- {
		arrNew[j] = arrOld[i]
		j++
	}
	fmt.Println(arrNew)

}

func arrayReverse() {
	fmt.Println("-------------数组反转-------------")
	var arr [10]int
	for i := 0; i < len(arr); i++ {
		arr[i] = rand.Intn(100)
	}
	fmt.Println(arr)

	//临时变量，交换值
	var temp int
	for i := 0; i < len(arr)/2; i++ {
		temp = arr[len(arr)-1-i]
		arr[len(arr)-1-i] = arr[i]
		arr[i] = temp
	}
	fmt.Println(arr)

}

func structArray() {
	fmt.Println("-------------数组~结构体-------------")
	var personArr [2]Person = [2]Person{
		{"tom"},
		{"jack"},
	}
	fmt.Println(personArr)

	var personArrPtr [2]*Person = [2]*Person{
		&Person{"tom"},
		&Person{"jack"},
	}
	fmt.Println(personArrPtr)

}

type Person struct {
	Name string
}
